# 网址: http://tieba.baidu.com
# 贴吧名：迪丽热巴吧
# 起始页：2
# 终止页：6
# 将网页的内容爬取到内容存入文件，文件名如下:
#
# 迪丽热巴吧_第2页.html  迪丽热巴吧_第3页.html .......

from urllib import request, parse
import time      # time.sleep(10)
import random    # 用来生成随机数

class TiebaSpider:
    def __init__(self):
        '''定义对象内部的变量(实例变量)'''
        self.url_fmt = 'http://tieba.baidu.com/f?kw={}&pn={}'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/80.0.3987.116 Safari/537.36'
        }

    def get_html(self,url):
        '''向网站发送请求，得到响应并拿到html 页面信息'''
        req = request.Request(url, headers=self.headers)
        resp = request.urlopen(req)
        content = resp.read()  # 读取接收的字节串
        html = content.decode()
        return html

    def parse_html(self,html):
        '''解析html文本，提取想要的信息数据'''

    def save_data(self,data):
        '''保存提取出来的数据，进行数据持久化'''

    def save_html(self,filename, html):
        '''保存html到filename文件中'''
        with open(filename, 'w') as fw:
            fw.write(html)

    def run(self):
        '''程序入口，控制爬虫的逻辑'''
        name = input('请输入贴吧名：')
        start = int(input('起始页：'))
        end = int(input('终止页：'))
        # 将贴吧名称转义
        name_url_encode = parse.quote(name)
        # 动态生成URL，爬取 多页数据
        for page in range(start, end + 1):
            # 根据
            pn = (page-1) * 50
            # 生成链接
            url = self.url_fmt.format(name_url_encode, pn)
            print('url:', url)
            # 生成对应页面的文件名
            filename = '{}_第{}页.html'.format(name, page)
            # 爬取html
            html = self.get_html(url)
            self.save_html(filename, html)
            # 控制爬取频率
            time.sleep(random.randint(3, 5))
            print(filename, '爬取成功')

if __name__ == '__main__':
    spider = TiebaSpider()  # 创建实例对象
    spider.run()  # 开始爬取数据




